草庐IT

Java CMS GC 行为

全部标签

c++ - CString 运算符 "+="和 "+"之间的不同行为

在将应用程序从VisualStudio2005迁移到VisualStudio2015时,我们发现在某些代码中存在不同的行为,当该代码是使用VS2015构建时连接CString实例。因此,我创建了一个简单的Win32控制台应用程序来演示该问题。控制台应用程序(使用MFC作为共享dll和Unicode字符集)执行这个简单的功能:voidf(){CStringx('\0');CStringr('a');r+=x;CStringrr('a');rr=rr+x;intrSize=r.GetLength();intrrSize=rr.GetLength();assert(rSize==rrSize

c++ - g++ 和 clang++ SFINAE 和 SFINAE 失败的不同行为

C++11专家的几个问题。我正在与SFINAE打交道,我遇到了一个奇怪的情况,其中g++(4.9.2)和clang++(3.5.0)的行为不同。我准备了以下示例代码。很抱歉,我无法做到更简洁。#include#include#include#includetemplateclassfoo{private:templateusingenableIfIsInt=typenamestd::enable_if::value,R>::type;public:foo(){}templateenableIfIsIntbar(){std::cout).name()fl;foofi;fl.bar();f

c++ - 具有数组分配的编译器的不同行为

与MSVC++2008相比,我最近发现g++有一个有趣的行为。考虑这个小程序:#includeconstintARR_LENGTH=512;voiddoSomething(intiLen);intmain(intargc,char**argv){doSomething(ARR_LENGTH);return0;}voiddoSomething(intiLen){intiTest[iLen];return;}它会编译吗?你怎么看?根据我对C(或C++)的了解,这不应该编译,因为我可以用我想要的任何整数调用函数doSomething(),所以iTest数组的大小无法在编译时确定。然而,当我尝

c++ - 主要开源项目使用哪些 GCcflags来控制 C 和 C++ 中的未定义行为?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。主要的开源项目使用一些GCcflags来解决编译器在处理未定义行为时感知到的过度渴望,特别是在C和C++语言中。例如:-fno-strict-aliasing是那些在输入双关时想要“传统”行为的人的主要工具。例如:https://lkml.org/lkml/2003/2/26/158-fwrapv通常在想要知道签名溢出的行为时使用。例如:http://a

c++ - 调试会改变多线程 C++ 程序的行为吗?

我正在开发一个处理大量同步问题的多线程C++程序。我正在使用VisualStudio2008。当我使用断点调试程序时,程序的运行时行为(跨线程执行语句的顺序)似乎发生了变化。这可以解释吗?这里的概念是什么?我希望执行顺序保持不变。第二个问题-Thread1是否被等待函数调用阻塞。Thread2有等待执行的语句,处于就绪状态。是否存在程序会等待Thread1继续执行而不是将执行交给Thread2的情况?我已经删除了两个线程之间的所有依赖关系,并确保Thread2没有在等待任何资源。感谢回复。 最佳答案 Thisarticleonmul

c++ - 这段代码的编译是标准行为吗?

考虑以下代码:structUndefined;templatevoidTemplateFunction(){Undefinedobj;}intmain(){return0;}我一直觉得模板函数和模板方法(或模板类的方法部分)只会检查语法(除非它们被实例化),在这种情况下,上面的代码应该编译。问题是,它不能用Xcode(版本:4.3.2,使用LLVM编译器)编译,现在我想知道上面的代码是否是非标准的,即它应该不编译符合C++03标准的编译器?Xcode的错误是:Variablehasincompletetype"Undefined"请注意,在原始代码中,undefinedobject是静

c++ - 在 Windows 7 中读取注册表行为异常

我正在尝试使用C++读取Windows7中注册表的“(默认)”值,以下是我正在使用的代码:stringGetSZValueUnique(HKEYopenKey,constchar*regkey,constchar*keyName){HKEYhKey=0;BYTEdata[512];DWORDszsize=512;stringvalue;LONGretValue=RegOpenKeyEx(openKey,regkey,0,KEY_READ,&hKey);if(retValue==ERROR_SUCCESS){LONGretV=RegQueryValueEx(hKey,keyName,0,

c++ - 启用 c++11 时 c++ 递归模板的奇怪行为

我试图理解我收到的一些递归C++模板代码,但遇到了一些奇怪的行为。出于某种原因,编译器似乎能够在编译时添加两个值,但必须在运行时进行左移。即便如此,只有当我尝试在启用c++11的情况下进行构建时才会出现问题。代码(我已经归结,你稍后会看到)定义了两对模板——一对名为shft和shft_aux和一对名为add和add_aux递归生成它们自己。顺便说一句,add模板不应该有用,它的唯一目的是演示问题,而不是生成实际的min值。如果我在没有命令行参数的情况下编译这段代码,它编译得很好。但是,如果我指定-std=c++11-stdlib=libc++,add_aux上的static_asser

c++ - 使用 lambda 构造 std::function 时 libstdc++ 和 libc++ 之间的不同行为

这个问题来自thisquestion.以下代码compilesfine将clang3.4与libstdc++结合使用:#includeintmain(){std::functionf=[](){};}但是failsmiserably使用clang3.4和libc++:Infileincludedfrommain.cpp:1:Infileincludedfrom/usr/include/c++/v1/functional:465:Infileincludedfrom/usr/include/c++/v1/memory:599:/usr/include/c++/v1/tuple:320:1

c++ - 自动生成的 move 构造函数导致非法行为

我问aquestionaboutmoveconstructors,但我尚未接受答案,因为即使在我开始对其他方面有所了解时,我对问题的某些方面也感到更加困惑。特别是,我发现了一个令人惊讶的情况,其中g++和clang++都生成不正确的move-constructor。问题总结g++和clang++显然违反了以下规则:明确定义析构函数时,不生成move-constructors。为什么?这是一个错误,还是我误会发生了什么?为了正确起见,这些(可能是非法的)move构造函数应使RHS指针成员无效,但它们不会无效。为什么不?看来,避免不良行为的唯一方法是为每个在其析构函数中使用delete的类